/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package robot_maker;

import Excepciones.BasesdeDatos;
import Excepciones.DinamicaDato;
import Excepciones.ProcesamientoDato;
import Excepciones.Sistema;
import Modelo.BaseDato;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import Excepciones.TiendaException;

/** La clase Tienda se encarga de almacenar las caracteristicas de las tiendas
 * que posee la fabrica.
 * 
 * @author CarlosScipione
 */
public class Tienda {

    private int _codigo;
    private String _nombre;
    private String _estado;
    private String _calle;
   

     /** Construye el objeto tienda
      *
      * @param nombre
      * @param estado
      * @param calle
      * @throws TiendaException
      */
    public Tienda(String nombre, String estado, String calle) 
            throws TiendaException {

        if ((nombre.isEmpty()) || (calle.isEmpty())){
            JOptionPane.showMessageDialog(null,
                    "Ningun campo debe ser vacio.");
            throw new TiendaException(15, "CAMPOS VACIOS DE LA TIENDA",
                    "CONSTRUCTOR");
        }else{
     _nombre =nombre.toUpperCase();
     _estado=estado;
     _calle =calle.toUpperCase();
        }
     
    }


    /** Contruye el objeto de tienda vacio
     *
     */
    public Tienda() {
    }

     /** Obtiene el nombre de la tienda
      *
      * @return String
      */
    public String getNombre() {
        return _nombre;
    }


    /** Obtiene la calle de la tienda
     *
     * @return String
     */
    public String getCalle() {
        return _calle;
    }


    /** Obtiene el codigo de la tienda
     *
     * @return int
     */
    public int getCodigo() {
        return _codigo;
    }


    /** Obtiene el Estado donde se ubica la tienda
     *
     * @return String
     */
    public String getEstado() {
        return _estado;
    }


/** Ingresa una tienda nueva a la base de datos
 *
 * @param nuevo
 * @throws BasesdeDatos
 * @throws TiendaException
 */
    public void ingresarBD (Tienda nuevo) throws TiendaException,
            ProcesamientoDato{
    try {

                if (validarNombre(nuevo._nombre)) {
                   BaseDato.ejecutarSqlInsert("insert into TIENDA (cod, nombre,"
                        + " estado, calle" + ") values (" + nuevo._codigo + ",'"
                        + nuevo._nombre + "','" + nuevo._estado + "','"
                        + nuevo._calle + "')");
                }

        } catch (DinamicaDato ex) {
                throw new ProcesamientoDato(1,
               "NO SE PUDO PROCESAR DATOS FOR FALTA DE LOS MISMOS",
               "EJECUTARSQLSELECT");        }
      
    }

    /** Coloca la calle de la tienda
     *
     * @param _calle
     */
    public void setCalle(String _calle) {
        this._calle = _calle;
    }


    /** Coloca el Estado donde se ubica la tienda
     *
     * @param _estado
     */
    public void setEstado(String _estado) {
        this._estado = _estado;
    }


    /** Coloca el nombre a la tienda
     *
     * @param _nombre
     */
    public void setNombre(String _nombre) {
        this._nombre = _nombre;
    }

 /** Valida que no exista ninguna otra tienda con el mismo nombre
  *
  * @param nombre
  * @return Boolean
  * @throws BasesdeDatos
  * @throws TiendaException
  */

    public Boolean validarNombre(String nombre) throws  TiendaException,
            ProcesamientoDato{
      ResultSet lista = null;
        try {
            lista = BaseDato.ejecutarSqlSelect("select COUNT(*) from TIENDA " +
                    "where nombre='" + nombre.toUpperCase() + "'");
        } catch (DinamicaDato ex) {
                throw new ProcesamientoDato(1,
               "NO SE PUDO PROCESAR DATOS FOR FALTA DE LOS MISMOS",
               "EJECUTARSQLSELECT");        }




           try {
            lista.next();
            if (lista.getString(1).equals("0"))
                return true;
            else{
                JOptionPane.showMessageDialog(null,
                    "Ese nombre ya existe.");
                throw new TiendaException(13,
                        "ESA TIENDA YA EXISTE EN LA BASE DE DATO",
                        "validarNombre");
            }

        } catch (Exception ex) {
            Sistema.loggear(14, "validarNombre", "SQL SYNTAXIS", Tienda.class,
                    "SQLException");
        }
         return false;
      }


    /** Borra de la base de datos un tienda
     *
     * @param aEliminar
     * @param n
     * @throws BasesdeDatos
     */
    public void borrarBD(int aEliminar, int n) throws ProcesamientoDato{

        if(n == 0){
            try {
                BaseDato.ejecutarSqlInsert("delete from TIENDA where COD=" +
                        aEliminar);
            } catch (DinamicaDato ex) {
                throw new ProcesamientoDato(1,
               "NO SE PUDO PROCESAR DATOS FOR FALTA DE LOS MISMOS",
               "EJECUTARSQLSELECT");            }
        }
    }

    /** Returna los datos de una tienda
     *
     * @param id
     * @return Tienda
     * @throws SQLException
     * @throws BasesdeDatos
     */
     public Tienda getDatos (int id){
            Tienda losa = new Tienda();
        try {
            ResultSet lista = null;
            lista = BaseDato.ejecutarSqlSelect("select * from TIENDA where COD="
                    + id);
            losa._codigo = id;
            lista.next();
            losa._nombre = lista.getString(2);
            losa._calle = lista.getString(3);
            losa._estado = lista.getString(4);
        } catch (DinamicaDato ex) {
            Logger.getLogger(Tienda.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Tienda.class.getName()).log(Level.SEVERE, null, ex);
    }
            return losa;

     }


     /** Modifica los datos de la tienda
      *
      * @param nuevo
      * @param codOld
      * @throws BasesdeDatos
      * @throws TiendaException
      */
    public void modificarBD (Tienda nuevo, String codOld) throws
            ProcesamientoDato, TiendaException{
        try{
        if (!codOld.equals(nuevo.getNombre())){
            if(validarNombre(nuevo.getNombre()))


                BaseDato.ejecutarSqlInsert("update TIENDA set nombre='" +
                   nuevo._nombre + "', estado='" + nuevo._estado + "', calle='"
                   + nuevo._calle + "' where cod=" + nuevo.getCodigo());

            
         }else{

                BaseDato.ejecutarSqlInsert("update TIENDA set estado='" +
                   nuevo._estado + "', calle='" + nuevo._calle + "' where cod="
                   + nuevo.getCodigo());
         }

         } catch (DinamicaDato ex) {
                throw new ProcesamientoDato(1,
               "NO SE PUDO PROCESAR DATOS FOR FALTA DE LOS MISMOS",
               "EJECUTARSQLSELECT");            }


      

    }


    /** Coloca el codigo de la tienda
     * 
     * @param _codigo
     */
    public void setCodigo(int _codigo) {
        this._codigo = _codigo;
    }

}
